#include <sstream>
#include <random>
#include <google/protobuf/map.h>

using namespace std;
namespace houy{
    namespace Util{
        class utils{
        public:
            static uint32_t random_char()
            {
                // c++11新特性，生成速度更快，周期长
                std::random_device rd; // 获取一个随机种子
                std::mt19937 gen(rd());
                std::uniform_int_distribution<> dis(0, 255); //(0, 255)
                return dis(gen);
            }

            // 生成 UUID （通用唯一标识符）
            static std::string generate_hex(const unsigned int len)
            {
                std::stringstream ss;
                // 生成 len 个16进制随机数，将其拼接而成
                for (auto i = 0; i < len; i++)
                {
                    const auto rc = random_char();
                    std::stringstream hexstream;
                    hexstream << std::hex << rc;
                    auto hex = hexstream.str();
                    ss << (hex.length() < 2 ? '0' + hex : hex);
                }
                return ss.str();
            }

            static void map_copy(google::protobuf::Map<std::string, std::string> *target,
                                 const google::protobuf::Map<std::string, std::string> &source)
            {
                if (nullptr == target)
                {
                    std::cout << "map_copy warning, target is nullptr!" << std::endl;
                    return;
                }
                for (auto it = source.cbegin(); it != source.cend(); ++it)
                {
                    target->insert({it->first, it->second});
                }
            }
        };
    }
}